Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / tests / frontend / ConversationViewer.test.js

Displaying Raw • Download


tests/frontend/ConversationViewer.test.js 329d1df1aa8bd123d6170ef0e5b3fc54a1fe07fd (329d1df1) Text, 29.63 KB

Tff7b72import Tb4b4b4{ Te6edf3mount Tb4b4b4} Tff7b72from Ta5d6ff"@vue/test-utils"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3describeTb4b4b4, Te6edf3itTb4b4b4, Te6edf3expectTb4b4b4, Te6edf3viTb4b4b4, Te6edf3beforeEachTb4b4b4, Te6edf3afterEach Tb4b4b4} Tff7b72from Ta5d6ff"vitest"Tb4b4b4;
Tff7b72import Te6edf3ConversationViewer Tff7b72from Ta5d6ff"@/components/messages/ConversationViewer.vue"Tb4b4b4;
Tff7b72import Te6edf3WebSocketConnection Tff7b72from Ta5d6ff"@/js/WebSocketConnection"Tb4b4b4;
Tff7b72import Te6edf3GlobalState Tff7b72from Ta5d6ff"@/js/GlobalState"Tb4b4b4;

Te6edf3viTb4b4b4.Te6edf3mockTb4b4b4(Ta5d6ff"@/js/DialogUtils"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Tff7b72defaultTff7b72: Tb4b4b4{
Te6edf3confirmTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;

Te6edf3describeTb4b4b4(Ta5d6ff"ConversationViewer.vue"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72let Te6edf3axiosMockTb4b4b4;

Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3GlobalStateTb4b4b4.Te6edf3configTb4b4b4.Te6edf3message_outbound_bubble_color Tff7b72= Ta5d6ff"#4f46e5"Tb4b4b4;
Te6edf3WebSocketConnectionTb4b4b4.Te6edf3connectTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3axiosMock Tff7b72= Tb4b4b4{
Te6edf3getTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/path"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3pathTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/stamp-info"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3stamp_infoTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/signal-metrics"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3signal_metricsTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3postTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3api Tff7b72= Te6edf3axiosMockTb4b4b4;

T8b949e// Mock localStorage
Tff7b72const Te6edf3localStorageMock Tff7b72= Tb4b4b4{
Te6edf3getItemTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3setItemTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3removeItemTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3stubGlobalTb4b4b4(Ta5d6ff"localStorage"Tb4b4b4, Te6edf3localStorageMockTb4b4b4)Tb4b4b4;

T8b949e// Mock URL.createObjectURL
Tffa657windowTb4b4b4.Te6edf3URLTb4b4b4.Te6edf3createObjectURL Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Ta5d6ff"mock-url"Tb4b4b4)Tb4b4b4;

T8b949e// Mock FileReader
Tff7b72const Te6edf3mockFileReader Tff7b72= Tb4b4b4{
Te6edf3readAsDataURLTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tff7b72function Tb4b4b4(Te6edf3blobTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3result Tff7b72= Ta5d6ff"data:image/png;base64,mock"Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3onloadTb4b4b4(Tb4b4b4{ Te6edf3targetTff7b72: Tb4b4b4{ Te6edf3resultTff7b72: Tff7b72thisTb4b4b4.Te6edf3result Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3stubGlobalTb4b4b4(
Ta5d6ff"FileReader"Tb4b4b4,
Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tff7b72function Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3mockFileReaderTb4b4b4;
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3afterEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72delete Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4;
Te6edf3viTb4b4b4.Te6edf3unstubAllGlobalsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3WebSocketConnectionTb4b4b4.Te6edf3destroyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3mountConversationViewer Tff7b72= Tb4b4b4(Te6edf3props Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72return Te6edf3mountTb4b4b4(Te6edf3ConversationViewerTb4b4b4, Tb4b4b4{
Te6edf3propsTff7b72: Tb4b4b4{
Te6edf3selectedPeerTff7b72: Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"Test Peer" Tb4b4b4}Tb4b4b4,
Te6edf3myLxmfAddressHashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3conversationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Tb4b4b4...Te6edf3propsTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tffa657globalTff7b72: Tb4b4b4{
Te6edf3directivesTff7b72: Tb4b4b4{ Ta5d6ff"click-outside"Tff7b72: Tb4b4b4{ Te6edf3mountedTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4, Te6edf3unmountedTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4,
Te6edf3mocksTff7b72: Tb4b4b4{
Te6edf3$tTff7b72: Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Te6edf3keyTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3stubsTff7b72: Tb4b4b4{
Te6edf3MaterialDesignIconTff7b72: Tff7b72trueTb4b4b4,
Te6edf3AddImageButtonTff7b72: Tff7b72trueTb4b4b4,
Te6edf3AddAudioButtonTff7b72: Tff7b72trueTb4b4b4,
Te6edf3SendMessageButtonTff7b72: Tff7b72trueTb4b4b4,
Te6edf3ConversationDropDownMenuTff7b72: Tff7b72trueTb4b4b4,
Te6edf3PaperMessageModalTff7b72: Tff7b72trueTb4b4b4,
Te6edf3AudioWaveformPlayerTff7b72: Tff7b72trueTb4b4b4,
Te6edf3LxmfUserIconTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"onMessagePaste adds images from clipboard and prevents default"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3file Tff7b72= Tff7b72new Te6edf3FileTb4b4b4(Tb4b4b4[Ta5d6ff""Tb4b4b4]Tb4b4b4, Ta5d6ff"clip.png"Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"image/png" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3items Tff7b72= Tb4b4b4[
Tb4b4b4{
Te6edf3kindTff7b72: Ta5d6ff"file"Tb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"image/png"Tb4b4b4,
Te6edf3getAsFileTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3fileTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3event Tff7b72= Tb4b4b4{
Te6edf3preventDefaultTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3clipboardDataTff7b72: Tb4b4b4{ Te6edf3items Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onMessagePasteTb4b4b4(Te6edf3eventTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3eventTb4b4b4.Te6edf3preventDefaultTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageImagesTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"onMessagePaste ignores non-image clipboard files (e.g. PDF) and does not prevent default"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3file Tff7b72= Tff7b72new Te6edf3FileTb4b4b4(Tb4b4b4[Ta5d6ff""Tb4b4b4]Tb4b4b4, Ta5d6ff"doc.pdf"Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"application/pdf" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3event Tff7b72= Tb4b4b4{
Te6edf3preventDefaultTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3clipboardDataTff7b72: Tb4b4b4{
Te6edf3itemsTff7b72: Tb4b4b4[
Tb4b4b4{
Te6edf3kindTff7b72: Ta5d6ff"file"Tb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"application/pdf"Tb4b4b4,
Te6edf3getAsFileTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3fileTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onMessagePasteTb4b4b4(Te6edf3eventTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3eventTb4b4b4.Te6edf3preventDefaultTb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageImagesTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"onMessagePaste does nothing when clipboard has no image file items"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3event Tff7b72= Tb4b4b4{
Te6edf3preventDefaultTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3clipboardDataTff7b72: Tb4b4b4{
Te6edf3itemsTff7b72: Tb4b4b4[Tb4b4b4{ Te6edf3kindTff7b72: Ta5d6ff"string"Tb4b4b4, Te6edf3typeTff7b72: Ta5d6ff"text/plain"Tb4b4b4, Te6edf3getAsStringTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Ta5d6ff"hi" Tb4b4b4}Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onMessagePasteTb4b4b4(Te6edf3eventTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3eventTb4b4b4.Te6edf3preventDefaultTb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageImagesTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"onMessagePaste adds multiple images from a single paste event"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3f1 Tff7b72= Tff7b72new Te6edf3FileTb4b4b4(Tb4b4b4[Ta5d6ff""Tb4b4b4]Tb4b4b4, Ta5d6ff"a.png"Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"image/png" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3f2 Tff7b72= Tff7b72new Te6edf3FileTb4b4b4(Tb4b4b4[Ta5d6ff""Tb4b4b4]Tb4b4b4, Ta5d6ff"b.png"Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"image/png" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3event Tff7b72= Tb4b4b4{
Te6edf3preventDefaultTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3clipboardDataTff7b72: Tb4b4b4{
Te6edf3itemsTff7b72: Tb4b4b4[
Tb4b4b4{ Te6edf3kindTff7b72: Ta5d6ff"file"Tb4b4b4, Te6edf3typeTff7b72: Ta5d6ff"image/png"Tb4b4b4, Te6edf3getAsFileTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3f1 Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3kindTff7b72: Ta5d6ff"file"Tb4b4b4, Te6edf3typeTff7b72: Ta5d6ff"image/png"Tb4b4b4, Te6edf3getAsFileTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3f2 Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onMessagePasteTb4b4b4(Te6edf3eventTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3eventTb4b4b4.Te6edf3preventDefaultTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageImagesTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"pasteFromClipboard inserts text at the message input selection"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3readText Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Ta5d6ff"pasted-text"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3stubGlobalTb4b4b4(Ta5d6ff"navigator"Tb4b4b4, Tb4b4b4{
Tb4b4b4...Te6edf3navigatorTb4b4b4,
Te6edf3clipboardTff7b72: Tb4b4b4{ Te6edf3readText Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3ta Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"#message-input"Tb4b4b4)Tb4b4b4.Te6edf3elementTb4b4b4;
Te6edf3taTb4b4b4.Te6edf3selectionStart Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3taTb4b4b4.Te6edf3selectionEnd Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageText Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3pasteFromClipboardTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageTextTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"pasted-text"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"adds multiple images and renders previews"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3image1 Tff7b72= Tff7b72new Te6edf3FileTb4b4b4(Tb4b4b4[Ta5d6ff""Tb4b4b4]Tb4b4b4, Ta5d6ff"image1.png"Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"image/png" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3image2 Tff7b72= Tff7b72new Te6edf3FileTb4b4b4(Tb4b4b4[Ta5d6ff""Tb4b4b4]Tb4b4b4, Ta5d6ff"image2.png"Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"image/png" Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onImageSelectedTb4b4b4(Te6edf3image1Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onImageSelectedTb4b4b4(Te6edf3image2Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageImagesTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageImageUrlsTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4;

T8b949e// Check if previews are rendered
Tff7b72const Te6edf3previews Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findAllTb4b4b4(Ta5d6ff"img"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3previewsTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"removes an image attachment"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3image1 Tff7b72= Tff7b72new Te6edf3FileTb4b4b4(Tb4b4b4[Ta5d6ff""Tb4b4b4]Tb4b4b4, Ta5d6ff"image1.png"Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"image/png" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onImageSelectedTb4b4b4(Te6edf3image1Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageImagesTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3removeImageAttachmentTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageImagesTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"sends multiple images as separate messages"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageText Tff7b72= Ta5d6ff"Hello"Tb4b4b4;

Tff7b72const Te6edf3image1 Tff7b72= Tff7b72new Te6edf3FileTb4b4b4(Tb4b4b4[Ta5d6ff""Tb4b4b4]Tb4b4b4, Ta5d6ff"image1.png"Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"image/png" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3image2 Tff7b72= Tff7b72new Te6edf3FileTb4b4b4(Tb4b4b4[Ta5d6ff""Tb4b4b4]Tb4b4b4, Ta5d6ff"image2.png"Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"image/png" Tb4b4b4}Tb4b4b4)Tb4b4b4;

T8b949e// Mock arrayBuffer for files
Te6edf3image1Tb4b4b4.Te6edf3arrayBuffer Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tff7b72new Tffa657ArrayBufferTb4b4b4(T79c0ff8Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3image2Tb4b4b4.Te6edf3arrayBuffer Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tff7b72new Tffa657ArrayBufferTb4b4b4(T79c0ff8Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onImageSelectedTb4b4b4(Te6edf3image1Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onImageSelectedTb4b4b4(Te6edf3image2Tb4b4b4)Tb4b4b4;

Te6edf3axiosMockTb4b4b4.Te6edf3postTb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3lxmf_messageTff7b72: Tb4b4b4{ Te6edf3hashTff7b72: Ta5d6ff"mock-hash" Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3sendMessageTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3sendCalls Tff7b72= Te6edf3axiosMockTb4b4b4.Te6edf3postTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=== Ta5d6ff"/api/v1/lxmf-messages/send"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3sendCallsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3sendCallsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(
Te6edf3expectTb4b4b4.Te6edf3objectContainingTb4b4b4(Tb4b4b4{
Te6edf3lxmf_messageTff7b72: Te6edf3expectTb4b4b4.Te6edf3objectContainingTb4b4b4(Tb4b4b4{
Te6edf3contentTff7b72: Ta5d6ff"Hello"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3sendCallsTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(
Te6edf3expectTb4b4b4.Te6edf3objectContainingTb4b4b4(Tb4b4b4{
Te6edf3lxmf_messageTff7b72: Te6edf3expectTb4b4b4.Te6edf3objectContainingTb4b4b4(Tb4b4b4{
Te6edf3contentTff7b72: Ta5d6ff""Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"auto-loads audio attachments on mount"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3chatItems Tff7b72= Tb4b4b4[
Tb4b4b4{
Te6edf3lxmf_messageTff7b72: Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"audio-hash"Tb4b4b4,
Te6edf3fieldsTff7b72: Tb4b4b4{
Te6edf3audioTff7b72: Tb4b4b4{ Te6edf3audio_modeTff7b72: T79c0ff0x10Tb4b4b4, Te6edf3audio_bytesTff7b72: Ta5d6ff"base64-data" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4;

Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3lxmf_messagesTff7b72: Te6edf3chatItemsTb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3iTb4b4b4) Tb4b4b4=> Te6edf3iTb4b4b4.Te6edf3lxmf_messageTb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4{
Te6edf3conversationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

T8b949e// initialLoad is called on mount
Tff7b72await Te6edf3viTb4b4b4.Te6edf3waitForTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;

T8b949e// downloadAndDecodeAudio should be triggered by autoLoadAudioAttachments
Tff7b72await Te6edf3viTb4b4b4.Te6edf3waitForTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=>
Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Te6edf3expectTb4b4b4.Te6edf3stringContainingTb4b4b4(Ta5d6ff"/audio"Tb4b4b4)Tb4b4b4, Te6edf3expectTb4b4b4.Te6edf3anyTb4b4b4(Tffa657ObjectTb4b4b4)Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"shows retry button in context menu for failed outbound messages"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3failedChatItem Tff7b72= Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"lxmf_message"Tb4b4b4,
Te6edf3is_outboundTff7b72: Tff7b72trueTb4b4b4,
Te6edf3lxmf_messageTff7b72: Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"failed-hash"Tb4b4b4,
Te6edf3stateTff7b72: Ta5d6ff"failed"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"failed message"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3fieldsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItems Tff7b72= Tb4b4b4[Te6edf3failedChatItemTb4b4b4]Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3messageContextMenuTb4b4b4.Te6edf3chatItem Tff7b72= Te6edf3failedChatItemTb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3messageContextMenuTb4b4b4.Te6edf3show Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3menuHtml Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3htmlTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3menuHtmlTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"Retry"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"does not show retry in context menu for delivered messages"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3deliveredItem Tff7b72= Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"lxmf_message"Tb4b4b4,
Te6edf3is_outboundTff7b72: Tff7b72trueTb4b4b4,
Te6edf3lxmf_messageTff7b72: Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"delivered-hash"Tb4b4b4,
Te6edf3stateTff7b72: Ta5d6ff"delivered"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"delivered message"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3fieldsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItems Tff7b72= Tb4b4b4[Te6edf3deliveredItemTb4b4b4]Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3messageContextMenuTb4b4b4.Te6edf3chatItem Tff7b72= Te6edf3deliveredItemTb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3messageContextMenuTb4b4b4.Te6edf3show Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3retryButtons Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findAllTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3bTb4b4b4) Tb4b4b4=> Te6edf3bTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"Retry"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3retryButtonsTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"calls retrySendingMessage when retry context menu clicked"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3failedChatItem Tff7b72= Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"lxmf_message"Tb4b4b4,
Te6edf3is_outboundTff7b72: Tff7b72trueTb4b4b4,
Te6edf3lxmf_messageTff7b72: Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"retry-hash"Tb4b4b4,
Te6edf3stateTff7b72: Ta5d6ff"failed"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"retry me"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3fieldsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3reply_to_hashTff7b72: Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;

Te6edf3axiosMockTb4b4b4.Te6edf3postTb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3lxmf_messageTff7b72: Tb4b4b4{ Te6edf3hashTff7b72: Ta5d6ff"new-hash"Tb4b4b4, Te6edf3stateTff7b72: Ta5d6ff"outbound" Tb4b4b4} Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3messageContextMenuTb4b4b4.Te6edf3chatItem Tff7b72= Te6edf3failedChatItemTb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3messageContextMenuTb4b4b4.Te6edf3show Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3messageContextMenuTb4b4b4.Te6edf3x Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3messageContextMenuTb4b4b4.Te6edf3y Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3retryButtonEl Tff7b72= Tffa657ArrayTb4b4b4.Tff7b72fromTb4b4b4(Tffa657documentTb4b4b4.Te6edf3bodyTb4b4b4.Te6edf3querySelectorAllTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3bTb4b4b4) Tb4b4b4=>
Te6edf3bTb4b4b4.Te6edf3textContentTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"Retry"Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3retryButtonElTb4b4b4)Tb4b4b4.Te6edf3toBeDefinedTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3retrySendingMessageTb4b4b4(Te6edf3failedChatItemTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3postTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(
Te6edf3expectTb4b4b4.Te6edf3stringContainingTb4b4b4(Ta5d6ff"/lxmf-messages/send"Tb4b4b4)Tb4b4b4,
Te6edf3expectTb4b4b4.Te6edf3objectContainingTb4b4b4(Tb4b4b4{
Te6edf3lxmf_messageTff7b72: Te6edf3expectTb4b4b4.Te6edf3objectContainingTb4b4b4(Tb4b4b4{
Te6edf3destination_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"retry me"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"marks received messages as not outbound"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3incomingMessage Tff7b72= Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"incoming-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"hello"Tb4b4b4,
Te6edf3stateTff7b72: Ta5d6ff"delivered"Tb4b4b4,
Te6edf3fieldsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onLxmfMessageReceivedTb4b4b4(Te6edf3incomingMessageTb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3addedItem Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItemsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3iTb4b4b4) Tb4b4b4=> Te6edf3iTb4b4b4.Te6edf3lxmf_messageTff7b72?Tb4b4b4.Te6edf3hash Tff7b72=== Ta5d6ff"incoming-hash"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3addedItemTb4b4b4)Tb4b4b4.Te6edf3toBeDefinedTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3addedItemTb4b4b4.Te6edf3is_outboundTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"generates created_at from timestamp when missing"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3liveMsg Tff7b72= Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"live-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"hello"Tb4b4b4,
Te6edf3stateTff7b72: Ta5d6ff"delivered"Tb4b4b4,
Te6edf3timestampTff7b72: T79c0ff1700000000Tb4b4b4,
Te6edf3fieldsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onLxmfMessageReceivedTb4b4b4(Te6edf3liveMsgTb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3addedItem Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItemsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3iTb4b4b4) Tb4b4b4=> Te6edf3iTb4b4b4.Te6edf3lxmf_messageTff7b72?Tb4b4b4.Te6edf3hash Tff7b72=== Ta5d6ff"live-hash"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3addedItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3created_atTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72new Tffa657DateTb4b4b4(T79c0ff1700000000 Tff7b72* T79c0ff1000Tb4b4b4)Tb4b4b4.Te6edf3toISOStringTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"converts unknown state to outbound for outgoing messages"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3outMsg Tff7b72= Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"out-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"hello"Tb4b4b4,
Te6edf3stateTff7b72: Ta5d6ff"unknown"Tb4b4b4,
Te6edf3timestampTff7b72: T79c0ff1700000000Tb4b4b4,
Te6edf3fieldsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onLxmfMessageCreatedTb4b4b4(Te6edf3outMsgTb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3addedItem Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItemsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3iTb4b4b4) Tb4b4b4=> Te6edf3iTb4b4b4.Te6edf3lxmf_messageTff7b72?Tb4b4b4.Te6edf3hash Tff7b72=== Ta5d6ff"out-hash"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3addedItemTb4b4b4)Tb4b4b4.Te6edf3toBeDefinedTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3addedItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3stateTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"outbound"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3addedItemTb4b4b4.Te6edf3is_outboundTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"preserves unknown state for incoming messages"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3inMsg Tff7b72= Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"in-unknown-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"hello"Tb4b4b4,
Te6edf3stateTff7b72: Ta5d6ff"unknown"Tb4b4b4,
Te6edf3timestampTff7b72: T79c0ff1700000000Tb4b4b4,
Te6edf3fieldsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onLxmfMessageReceivedTb4b4b4(Te6edf3inMsgTb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3addedItem Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItemsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3iTb4b4b4) Tb4b4b4=> Te6edf3iTb4b4b4.Te6edf3lxmf_messageTff7b72?Tb4b4b4.Te6edf3hash Tff7b72=== Ta5d6ff"in-unknown-hash"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3addedItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3stateTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"unknown"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"does not overwrite existing created_at"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3dbMsg Tff7b72= Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"db-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"hello"Tb4b4b4,
Te6edf3stateTff7b72: Ta5d6ff"delivered"Tb4b4b4,
Te6edf3timestampTff7b72: T79c0ff1700000000Tb4b4b4,
Te6edf3created_atTff7b72: Ta5d6ff"2023-11-14T22:13:20.000Z"Tb4b4b4,
Te6edf3fieldsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onLxmfMessageReceivedTb4b4b4(Te6edf3dbMsgTb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3addedItem Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItemsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3iTb4b4b4) Tb4b4b4=> Te6edf3iTb4b4b4.Te6edf3lxmf_messageTff7b72?Tb4b4b4.Te6edf3hash Tff7b72=== Ta5d6ff"db-hash"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3addedItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3created_atTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"2023-11-14T22:13:20.000Z"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"uses theme outbound bubble: no inline background for default indigo config"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3GlobalStateTb4b4b4.Te6edf3configTb4b4b4.Te6edf3message_outbound_bubble_color Tff7b72= Ta5d6ff"#4f46e5"Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3chatItem Tff7b72= Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"lxmf_message"Tb4b4b4,
Te6edf3is_outboundTff7b72: Tff7b72trueTb4b4b4,
Te6edf3lxmf_messageTff7b72: Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"h1"Tb4b4b4,
Te6edf3stateTff7b72: Ta5d6ff"delivered"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"hi"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3fieldsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3styles Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3bubbleStylesTb4b4b4(Te6edf3chatItemTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3stylesTb4b4b4[Ta5d6ff"background-color"Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeUndefinedTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3outboundBubbleSurfaceClassTb4b4b4(Te6edf3chatItemTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"bg-sky-100"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3isThemeOutboundBubbleTb4b4b4(Te6edf3chatItemTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"uses solid outbound bubble when custom color is set"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3GlobalStateTb4b4b4.Te6edf3configTb4b4b4.Te6edf3message_outbound_bubble_color Tff7b72= Ta5d6ff"#ff0000"Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3chatItem Tff7b72= Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"lxmf_message"Tb4b4b4,
Te6edf3is_outboundTff7b72: Tff7b72trueTb4b4b4,
Te6edf3lxmf_messageTff7b72: Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"h2"Tb4b4b4,
Te6edf3stateTff7b72: Ta5d6ff"delivered"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"hi"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3fieldsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3bubbleStylesTb4b4b4(Te6edf3chatItemTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toMatchObjectTb4b4b4(Tb4b4b4{
Ta5d6ff"background-color"Tff7b72: Ta5d6ff"#ff0000"Tb4b4b4,
Te6edf3colorTff7b72: Ta5d6ff"#ffffff"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3outboundBubbleSurfaceClassTb4b4b4(Te6edf3chatItemTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"shadow-sm"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3isThemeOutboundBubbleTb4b4b4(Te6edf3chatItemTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"marks inbound messages with markdown-content--inbound for link styling"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3GlobalStateTb4b4b4.Te6edf3configTb4b4b4.Te6edf3message_outbound_bubble_color Tff7b72= Ta5d6ff"#4f46e5"Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3chatItem Tff7b72= Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"lxmf_message"Tb4b4b4,
Te6edf3is_outboundTff7b72: Tff7b72falseTb4b4b4,
Te6edf3lxmf_messageTff7b72: Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"in1"Tb4b4b4,
Te6edf3stateTff7b72: Ta5d6ff"delivered"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"https://example.com"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3fieldsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItems Tff7b72= Tb4b4b4[Te6edf3chatItemTb4b4b4]Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3viTb4b4b4.Te6edf3waitForTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff".markdown-content--inbound"Tb4b4b4)Tb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"sets reply state and includes reply_to_hash in sendMessage"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3chatItem Tff7b72= Tb4b4b4{
Te6edf3lxmf_messageTff7b72: Tb4b4b4{ Te6edf3hashTff7b72: Ta5d6ff"original-hash"Tb4b4b4, Te6edf3contentTff7b72: Ta5d6ff"Original message" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;

T8b949e// Add to chatItems
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItems Tff7b72= Tb4b4b4[Te6edf3chatItemTb4b4b4]Tb4b4b4;

Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3replyToMessageTb4b4b4(Te6edf3chatItemTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3replyingToTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3hashTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3chatItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3hashTb4b4b4)Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageText Tff7b72= Ta5d6ff"My reply"Tb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3postTb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3lxmf_messageTff7b72: Tb4b4b4{ Te6edf3hashTff7b72: Ta5d6ff"reply-hash" Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3sendMessageTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3postTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(
Ta5d6ff"/api/v1/lxmf-messages/send"Tb4b4b4,
Te6edf3expectTb4b4b4.Te6edf3objectContainingTb4b4b4(Tb4b4b4{
Te6edf3lxmf_messageTff7b72: Te6edf3expectTb4b4b4.Te6edf3objectContainingTb4b4b4(Tb4b4b4{
Te6edf3contentTff7b72: Ta5d6ff"My reply"Tb4b4b4,
Te6edf3reply_to_hashTff7b72: Ta5d6ff"original-hash"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3replyingToTb4b4b4)Tb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3describeTb4b4b4(Ta5d6ff"conversation history loading"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3deferredConversationGet Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3deferredResolvers Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/lxmf-messages/conversation/"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3resolveTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3deferredResolversTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3resolveTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/path"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3pathTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/stamp-info"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3stamp_infoTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/signal-metrics"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3signal_metricsTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/contacts/check/"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3deferredResolversTb4b4b4;
Tb4b4b4}Tb4b4b4;

Tff7b72let Te6edf3inboundMsgId Tff7b72= T79c0ff1000Tb4b4b4;
Tff7b72const Te6edf3inboundFrom Tff7b72= Tb4b4b4(Te6edf3hashTb4b4b4, Te6edf3contentTb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Te6edf3idTff7b72: Te6edf3inboundMsgIdTff7b72++Tb4b4b4,
Te6edf3hashTff7b72: Ta5d6ff`Ta5d6ffmsg-Tffd700${Te6edf3hashTb4b4b4.Te6edf3sliceTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff4Tb4b4b4)Tffd700}Ta5d6ff-Tffd700${Te6edf3contentTffd700}Ta5d6ff`Tb4b4b4,
Te6edf3source_hashTff7b72: Te6edf3hashTb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3contentTb4b4b4,
Te6edf3stateTff7b72: Ta5d6ff"delivered"Tb4b4b4,
Te6edf3timestampTff7b72: T79c0ff1700000000Tb4b4b4,
Te6edf3fieldsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"loads the current peer after switching while a prior fetch was still in flight"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3deferredResolvers Tff7b72= Te6edf3deferredConversationGetTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3peerA Tff7b72= Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"a"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"A" Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3peerB Tff7b72= Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"b"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"B" Tb4b4b4}Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4{
Te6edf3selectedPeerTff7b72: Te6edf3peerATb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3viTb4b4b4.Te6edf3waitForTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3expectTb4b4b4(Te6edf3deferredResolversTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanOrEqualTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3setPropsTb4b4b4(Tb4b4b4{ Te6edf3selectedPeerTff7b72: Te6edf3peerB Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3viTb4b4b4.Te6edf3waitForTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3expectTb4b4b4(Te6edf3deferredResolversTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanOrEqualTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4)Tb4b4b4;

Te6edf3deferredResolversTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3lxmf_messagesTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItemsTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;

Te6edf3deferredResolversTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3lxmf_messagesTff7b72: Tb4b4b4[Te6edf3inboundFromTb4b4b4(Ta5d6ff"b"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Ta5d6ff"hello"Tb4b4b4)Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3viTb4b4b4.Te6edf3waitForTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItemsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItemsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3contentTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"hello"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"applies only the latest peer response when multiple requests resolve out of order"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3deferredResolvers Tff7b72= Te6edf3deferredConversationGetTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3peerA Tff7b72= Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"a"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"A" Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3peerB Tff7b72= Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"b"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"B" Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3peerC Tff7b72= Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"c"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"C" Tb4b4b4}Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4{ Te6edf3selectedPeerTff7b72: Te6edf3peerA Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3viTb4b4b4.Te6edf3waitForTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3expectTb4b4b4(Te6edf3deferredResolversTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanOrEqualTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3setPropsTb4b4b4(Tb4b4b4{ Te6edf3selectedPeerTff7b72: Te6edf3peerB Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3viTb4b4b4.Te6edf3waitForTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3expectTb4b4b4(Te6edf3deferredResolversTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanOrEqualTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3setPropsTb4b4b4(Tb4b4b4{ Te6edf3selectedPeerTff7b72: Te6edf3peerC Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3viTb4b4b4.Te6edf3waitForTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3expectTb4b4b4(Te6edf3deferredResolversTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanOrEqualTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4)Tb4b4b4;

Te6edf3deferredResolversTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3lxmf_messagesTff7b72: Tb4b4b4[Te6edf3inboundFromTb4b4b4(Ta5d6ff"a"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Ta5d6ff"stale-a"Tb4b4b4)Tb4b4b4] Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3deferredResolversTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3lxmf_messagesTff7b72: Tb4b4b4[Te6edf3inboundFromTb4b4b4(Ta5d6ff"b"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Ta5d6ff"stale-b"Tb4b4b4)Tb4b4b4] Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItemsTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;

Te6edf3deferredResolversTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3lxmf_messagesTff7b72: Tb4b4b4[Te6edf3inboundFromTb4b4b4(Ta5d6ff"c"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Ta5d6ff"current"Tb4b4b4)Tb4b4b4] Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3viTb4b4b4.Te6edf3waitForTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItemsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItemsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3contentTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"current"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"does not start another page fetch while pagination is already in flight"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3baseMsg Tff7b72= Tb4b4b4{
Te6edf3idTff7b72: T79c0ff42Tb4b4b4,
Te6edf3hashTff7b72: Ta5d6ff"page1-msg"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"first page"Tb4b4b4,
Te6edf3stateTff7b72: Ta5d6ff"delivered"Tb4b4b4,
Te6edf3timestampTff7b72: T79c0ff1700000000Tb4b4b4,
Te6edf3fieldsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/lxmf-messages/conversation/"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3lxmf_messagesTff7b72: Tb4b4b4[Te6edf3baseMsgTb4b4b4] Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/path"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3pathTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/stamp-info"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3stamp_infoTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/signal-metrics"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3signal_metricsTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/contacts/check/"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3viTb4b4b4.Te6edf3waitForTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItemsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3conversationGets Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=>
Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Tffa657StringTb4b4b4(Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/lxmf-messages/conversation/"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3countBefore Tff7b72= Te6edf3conversationGetsTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3lengthTb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3isLoadingPrevious Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3loadPreviousTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3conversationGetsTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3countBeforeTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3describeTb4b4b4(Ta5d6ff"compose draft persistence"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72let Te6edf3draftStoreTb4b4b4;

Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3draftStore Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3stubGlobalTb4b4b4(Ta5d6ff"localStorage"Tb4b4b4, Tb4b4b4{
Te6edf3getItemTff7b72: Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Tb4b4b4(Tffa657ObjectTb4b4b4.Te6edf3prototypeTb4b4b4.Te6edf3hasOwnPropertyTb4b4b4.Te6edf3callTb4b4b4(Te6edf3draftStoreTb4b4b4, Te6edf3keyTb4b4b4) Tff7b72? Te6edf3draftStoreTb4b4b4[Te6edf3keyTb4b4b4] Tff7b72: Tff7b72nullTb4b4b4)Tb4b4b4,
Te6edf3setItemTff7b72: Tb4b4b4(Te6edf3keyTb4b4b4, Te6edf3valueTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3draftStoreTb4b4b4[Te6edf3keyTb4b4b4] Tff7b72= Tffa657StringTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3removeItemTff7b72: Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72delete Te6edf3draftStoreTb4b4b4[Te6edf3keyTb4b4b4]Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"persists the previous peer draft in localStorage when switching peers"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3peerA Tff7b72= Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"a"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"A" Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3peerB Tff7b72= Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"b"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"B" Tb4b4b4}Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4{ Te6edf3selectedPeerTff7b72: Te6edf3peerA Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageText Tff7b72= Ta5d6ff"draft for A"Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3setPropsTb4b4b4(Tb4b4b4{ Te6edf3selectedPeerTff7b72: Te6edf3peerB Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3drafts Tff7b72= Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3draftStoreTb4b4b4[Ta5d6ff"meshchat.drafts"Tb4b4b4] Tff7b72|| Ta5d6ff"{}"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3draftsTb4b4b4[Ta5d6ff"a"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"draft for A"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"loads the stored draft when opening a peer"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3draftStoreTb4b4b4[Ta5d6ff"meshchat.drafts"Tb4b4b4] Tff7b72= Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{
Tb4b4b4[Ta5d6ff"b"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4]Tff7b72: Ta5d6ff"remembered"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4{
Te6edf3selectedPeerTff7b72: Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"b"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"B" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageTextTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"remembered"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"round-trips drafts for A then B then back to A"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3peerA Tff7b72= Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"a"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"A" Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3peerB Tff7b72= Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"b"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"B" Tb4b4b4}Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4{ Te6edf3selectedPeerTff7b72: Te6edf3peerA Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageText Tff7b72= Ta5d6ff"text-a"Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3setPropsTb4b4b4(Tb4b4b4{ Te6edf3selectedPeerTff7b72: Te6edf3peerB Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageTextTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff""Tb4b4b4)Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageText Tff7b72= Ta5d6ff"text-b"Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3setPropsTb4b4b4(Tb4b4b4{ Te6edf3selectedPeerTff7b72: Te6edf3peerA Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageTextTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"text-a"Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3setPropsTb4b4b4(Tb4b4b4{ Te6edf3selectedPeerTff7b72: Te6edf3peerB Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageTextTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"text-b"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"removes the draft key when saving an empty compose box for that peer"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3draftStoreTb4b4b4[Ta5d6ff"meshchat.drafts"Tb4b4b4] Tff7b72= Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{
Tb4b4b4[Ta5d6ff"a"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4]Tff7b72: Ta5d6ff"will clear"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4{
Te6edf3selectedPeerTff7b72: Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"a"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"A" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageText Tff7b72= Ta5d6ff""Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3saveDraftTb4b4b4(Ta5d6ff"a"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3drafts Tff7b72= Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3draftStoreTb4b4b4[Ta5d6ff"meshchat.drafts"Tb4b4b4] Tff7b72|| Ta5d6ff"{}"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3draftsTb4b4b4[Ta5d6ff"a"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeUndefinedTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"persists the current compose text when the component unmounts"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3peer Tff7b72= Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"a"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"A" Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountConversationViewerTb4b4b4(Tb4b4b4{ Te6edf3selectedPeerTff7b72: Te6edf3peer Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newMessageText Tff7b72= Ta5d6ff"save on leave"Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3drafts Tff7b72= Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3draftStoreTb4b4b4[Ta5d6ff"meshchat.drafts"Tb4b4b4] Tff7b72|| Ta5d6ff"{}"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3draftsTb4b4b4[Ta5d6ff"a"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"save on leave"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────